/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package dao;

import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import pojo.Binhluan;
import pojo.BinhluanId;
import pojo.Tinhtrang;
import util.HibernateUtil;

/**
 *
 * @author kydrenw
 */
public class BinhluanDAO {

    /**
     * Lấy thông tin của bình luận theo ID được đưa vào.
     * @param id : ID của bình luận cần lấy
     * @return : Đối tượng chứa thông tin bình luận
     *           Null nếu thất bại.
     */
    public static Binhluan layThongTin(BinhluanId id) {
        Binhluan sp = null;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        try {
            session.beginTransaction();
            sp = (Binhluan) session.get(Binhluan.class, id);
        } catch (Exception ex) {
            sp = null;
        }

        return sp;
    }

    /**
     * Lấy danh sách tất cả các bình luận
     * @return  Danh sach cac binh luan tim thay.
     */
    public static List<Binhluan> layDanhSach() {
        List<Binhluan> ds = null;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();

        try {
            session.beginTransaction();
            String hql = "FROM Binhluan";
            Query query = session.createQuery(hql);
            ds = query.list();
        } catch (Exception ex) {
            ds = null;
        }
        return ds;
    }

    /**
     * Lấy danh sách bình luận của 1 sản phẩm dựa theo mã sản phẩm truyền vào.
     * @param maSanPham: Mã của sản phẩm cần lấy danh sách bình luận
     * @return : danh sách bình luận tìm được.
     */
    public static List<Binhluan> layDanhSach(int maSanPham) {
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = session.getTransaction();
        List<Binhluan> result = null;
        String hql = "FROM Binhluan bl where bl.id.masp=:Ma";

        try {
            trans.begin();
            Query query = session.createQuery(hql);
            query.setInteger("Ma", maSanPham);
            result = query.list();
            trans.commit();
        } catch (Exception ex) {
            System.out.println(ex.getMessage());
            result = null;
        }

        return result;
    }

    /**
     * Thêm một bình luận mới
     * @param binhLuan: Đối tượng chứa thông tin của bình luận cần thêm
     * @return : True nếu thành công, False nếu thất bại.
     */
    public static Boolean themBinhLuan(Binhluan binhLuan) {
        boolean result = true;
        Session session = HibernateUtil.getSessionFactory().getCurrentSession();
        Transaction trans = session.getTransaction();
        String hql = "select max(bl.id.stt) from Binhluan bl where bl.id.masp =:Ma";

        try {
            trans.begin();
            int stt = 1;
            Query qr = session.createQuery(hql);
            
            // Lay ma so lon nhat cua danh sach binh luan hiên co
            qr.setInteger("Ma", binhLuan.getId().getMasp());
            List lst = qr.list();
            
            // tăng lên 1 va gan cho binh luan moi
            if (lst.get(0) == null || lst.isEmpty()) {
                stt = 1;
            } else {
                stt = (Integer) lst.get(0);
            }
            binhLuan.getId().setStt(stt + 1);

            // Luu binh luan vao CSDL
            session.save(binhLuan);
            trans.commit();

        } catch (Exception ex) {
            result = false;
            System.out.println(ex.getMessage());
        }
        return result;
    }
}
